package mc0101.mccache.param;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Data
@Component
public class LockRelativeParam {

	// 查询量缓存更新锁的最长锁定时间
	@Value("${cc.crs.rtm.LockRelativeParamConfig.updateQryCountRedisMaxWaitMillSecond:10000}")
	public int updateQryCountRedisMaxWaitMillSecond;

	@Value("5000")
	public int updateQryCountRedisMaxRetryMillSecond;
	@Value("3000")
	public int updateQryCountRedisRemainOperationMillSecond;

	// 缓存更新到Mysql时，取得的执行权锁的最大持续时间
	@Value("${cc.crs.rtm.LockRelativeParamConfig.updateRedisToMysqlMaxRunMillSecond:30000}")
	public int updateRedisToMysqlMaxRunMillSecond;

	// 获取缓存更新到Mysql的执行权时，失败后再次尝试获取的时间间隔
	@Value("${cc.crs.rtm.LockRelativeParamConfig.retryGetRedisToMysqlUpdateAuthIntervalMillSecond:200}")
	public int retryGetRedisToMysqlUpdateAuthIntervalMillSecond;

	// 获取到缓存更新Mysql的执行权后，二次获取并校验的时间间隔
	@Value("${cc.crs.rtm.LockRelativeParamConfig.confirmRedisToMysqlUpdateAuthIntervalMillSecond:10000}")
	public int confirmRedisToMysqlUpdateAuthIntervalMillSecond;

	// 缓存更新Job判断初始化未完成时，继续等待多久
	@Value("${cc.crs.rtm.LockRelativeParamConfig.updateJobInitNotFinishContinueWaitMillSecond:1000}")
	public int updateJobInitNotFinishContinueWaitMillSecond;

	// 缓存更新Job判断初始化未完成时，最大等待次数（最大等待时间 等于 每次继续等待时间 乘以 最大等待次数）
	@Value("${cc.crs.rtm.LockRelativeParamConfig.updateJobInitNotFinishMaxWaitCount:20}")
	public int updateJobInitNotFinishMaxWaitCount;

	// 尝试获取分布式锁失败后再次获取的时间间隔
	@Value("${cc.crs.rtm.LockRelativeParamConfig.retryGetDistributedLockIntevalMillSecond:100}")
	public int retryGetDistributedLockIntevalMillSecond;

	// 获取缓存分布式锁的最短执行时间(expireTime，仅针对父用户)
	@Value("${cc.crs.rtm.LockRelativeParamConfig.remainDistributedLockExecTimeMillSecond:1000}")
	public int remainDistributedLockExecTimeMillSecond;
}

